Many business entities and consumers are developing, testing, and consuming software applications and/or system configurations using virtual computing environments, such as virtual machines (VMs). A virtual machine provides a self-contained computing environment that may execute on a controller, such as one or more servers and/or desktop computing devices. The virtual machine may comprise its own operating system and one or more applications that are separate from the native operating environment of the controller. In this way, a virtual machine may execute on the controller without affecting the native operating environment of the controller (and/or other VMs executing on the controller). For example, a software developer may deploy and test a software product within one or more virtual machines executing on a host controller. The respective virtual machines may have similar or different software configurations (e.g., different operating systems, different software applications, etc.), which may be based upon the type of testing being performed. Events occurring at one of the virtual machines (e.g., installation or removal of a software application, a virtual computing environment crash, configuration changes to the virtual operating system and/or applications, etc.) may not affect the other virtual machines and/or the native operating environment of the host controller. In this way, the software product may be tested within a variety of virtual computing environments without affecting the native operating environment of the controller.
In one example, a virtual server environment may comprise multiple physical controllers, such as servers, that access a distributed data storage and management system. Respective controllers may comprise a plurality of virtual machines that reside and execute on one or more of the respective controllers. A virtual machine may comprise one or more applications and its own operating system and functions as a self-contained computing environment. Virtual machines on a controller may be configured to share hardware resources of the controller, and if connected to a distributed data storage and management system (cluster), share hardware resources of the cluster. A virtual machine monitor module/engine (hypervisor) may be used to manage the virtual machines on respective controllers, and also virtualize hardware and/or software resources of the controllers in the cluster for use by the virtual machines. Clients may be connected to the cluster to interface/interact with a particular virtual machine, to experience an emulated desktop environment, such as a virtual desktop environment, on the client machine. From the viewpoint of a client, the virtual machine may comprise a virtual desktop, or server that appears as an actual desktop machine environment or physical server.
In one example of a virtual computing environment, and making use thereof, a software development team may have developed a software system for a customer's factory that produces cars. The software development team may desire a test environment that mimics the customer's computing environment, with which to test the software system. In order to setup the test environment, a plurality of virtual machines mimicking the customer's computing devices in the factory may be created (e.g., 10 or more virtual machines). For example, the test environment may comprise virtual machines mimicking database servers, web servers, lab computing devices, factory machine computing devices, and/or other computing devices having particular configurations and/or software setup. In this way, the software development team may initialize, test, modify, remove, and/or reinitialize one or more virtual machines in the test environment without affecting the customer's actual computing environment and/or other VMs. It can thus be appreciated that it may be advantageous to use virtual machines within the test environment because if something goes wrong (e.g., an unrecoverable crash) or undesired modifications are made to a virtual machine (e.g., desired programming code is accidentally overwritten), then the virtual machine may be torn down (removed) and a fresh copy of the virtual machine may be reinitialized without adversely affecting other operations.
Unfortunately, deploying such a large number of virtual machines may be a time consuming and mundane task, which may require extensive manual intervention to deploy. In one example of manual actions taken to initialize merely a single virtual machine, a user may first create the virtual machine. Next, the user may boot the virtual machine and assign either a disk or an ISO image. Then, the user may install an operating system and/or desired software on the virtual machine, which may take hours. Additionally, the user may have to know particular information of a controller that is to host the virtual machine (e.g., IP address and/or other configuration data used to configure the virtual machine to execute on the controller). Such actions may need to be repeated time and again to instantiate respective VMs. In this way, it may take many man hours (e.g., days) for a user to setup one or more virtual machines.